﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using AutorizacionRESTServices.Dominio;
using AutorizacionRESTServices.Persistencia;
using System.ServiceModel.Web;
using System.Net;
using AutorizacionRESTServices.AutorizacionWS;
using System.Messaging;

namespace AutorizacionRESTServices
{
    public class Seguros : ISeguros
    {
        private SegurosDAO dao = new SegurosDAO();

        public Seguro CrearSeguro(Seguro seguroACrear)
        {

            Seguro busse = ObtenerSeguro(seguroACrear.CodigoS);
            //Verifica si el codigo de Seguro ya existe
            if (busse != null)
            {
                throw new WebFaultException<Error>(
                    new Error()
                    {
                        CodigoNegocio = "1",
                        MensajeNegocio = "No SE PUEDE CREAR UN CODIGO_SEGURO DUPLICADO"
                    },
                     HttpStatusCode.InternalServerError);
            }

            AutorizacionWS.AutorizacionesClient proxy = new AutorizacionWS.AutorizacionesClient();
            Autorizacion resultado = proxy.ObtenerAutorizacion(int.Parse(seguroACrear.CodAU));

            //Verifica si la Autorizacion se Existe
            if (resultado == null)
            {
                throw new WebFaultException<Error>(
                    new Error()
                    {
                        CodigoNegocio = "1",
                        MensajeNegocio = "NO EXISTE AUTORIZACION"
                    },
                     HttpStatusCode.InternalServerError);
            }

            //Verifica si la Autorizacion se encuentra Denegada
            if (resultado.Status == "DENEGADO")
            {
                throw new WebFaultException<Error>(
                    new Error()
                    {
                        CodigoNegocio = "1",
                        MensajeNegocio = "AUTORIZACION ESTA DENEGADA"
                    },
                     HttpStatusCode.InternalServerError);
            }

            //Verifica si la Autorizacion se encuentra Pendiente
            if (resultado.Status == "PENDIENTE")
            {
                throw new WebFaultException<Error>(
                    new Error()
                    {
                        CodigoNegocio = "2",
                        MensajeNegocio = "AUTORIZACION ESTA PENDIENTE"
                    },
                     HttpStatusCode.InternalServerError);
            }

            

            string rutaCola = @".\private$\seguro";

            if (!MessageQueue.Exists(rutaCola))
                MessageQueue.Create(rutaCola);

            MessageQueue cola = new MessageQueue(rutaCola);
            Message mensaje = new Message();
            mensaje.Label = "Nuevo Seguro";
            mensaje.Body = "Seguro para la Autorizacion " + seguroACrear.CodAU + " se genero exitosamente";
            cola.Send(mensaje);

            return dao.Crear(seguroACrear);
            //return "S en proceso";
        }

        public Seguro ObtenerSeguro(string codigo)
        {
            return dao.Obtener(codigo);
        }

        public Seguro ModificarSeguro(Seguro seguroAModificar)
        {
            return dao.Modificar(seguroAModificar);
        }

        public void EliminarSeguro(string codigo)
        {
            dao.Eliminar(codigo);
        }

        public List<Seguro> ListarSeguros()
        {
            return dao.ListarTodos();
        }
    }
}
